// 权限控制的文件  自己搭建
import router from '@/router' // 所有的动态路由数组  根据用户权限筛选
import store from '@/store' // vuex
import nProgress from 'nprogress' // 进度条
import 'nprogress/nprogress.css'

// 路由前置守卫
const whiteList = ['/login', '/404'] // 白名单 跳转名单里的路由是可以的
router.beforeEach(async(to, from, next) => {
  nProgress.start()
  // 当用户登录了 跳转其他页面就next放行  跳转登录就('/')
  if (store.state.user.token) {
    // 如果有用户的数据 那么就不用发请求获取用户的数据
    if (!store.state.user.userInfo.userId) {
      // 在此可以获得用户数据 同样也可以获取到用户的权限(可以访问哪些路由)
      const { roles } = await store.dispatch('user/getUserInfo')
      // 拿到用户数据后可以根据用户权限来动态生成路由规则 , 并要把所有的路由规则记录在vuex中 因为侧边栏要用到
      await store.commit('permission/setFilterVarRoutes', roles)
      next(to.path)
    }
    if (to.path === '/login') {
      next('/')
    } else {
      next()
    }
  } else {
  // 当用户未登录 跳转其他页面就('/login')  跳转登录就next()
    // 如果要跳转的路由在白名单里面 放行  否则不放行 跳到login
    if (whiteList.indexOf(to.path) === -1) {
      next('/login')
    } else {
      next()
    }
  }
  await nProgress.done()
})
